package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.rzcode.coinex.kernel.common.enums.PayModeEnum;
import com.rzcode.coinex.kernel.common.enums.WithdrawStateEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * 合法钱包提现实体类，用于存储合法钱包提现的详细信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "legal_wallet_withdraw")
public class LegalWalletWithdraw {

    /**
     * 提现记录ID，自增长主键。
     */
    @ApiModelProperty(value = "提现记录ID", example = "1")
    private Long id;

    /**
     * 申请人，进行提现的会员信息。
     */
    @ApiModelProperty(value = "申请人信息", required = true)
    private Member member;

    /**
     * 申请数量，本次提现的数量。
     */
    @ApiModelProperty(value = "申请数量", example = "100.00000000")
    private BigDecimal amount;

    /**
     * 创建时间，提现申请创建的时间。
     */
    @ApiModelProperty(value = "创建时间", example = "2023-03-01 12:00:00")
    private LocalDateTime createTime;

    /**
     * 处理时间，提现处理完成的时间。
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "处理时间", example = "2023-03-01 12:30:00")
    private LocalDateTime dealTime;

    /**
     * 提现状态，提现的当前状态。
     */
    @ApiModelProperty(value = "提现状态", example = "PROCESSING")
    private WithdrawStateEnum status = WithdrawStateEnum.PROCESSING;

    /**
     * 审核人，审核提现请求的管理员信息。
     */
    @ApiModelProperty(value = "审核人信息")
    private Admin admin;

    /**
     * 备注，提现的额外备注信息。
     */
    @ApiModelProperty(value = "备注", example = "周末促销提现")
    private String remark;

    /**
     * 收款方式，提现所采用的收款方式。
     */
    @ApiModelProperty(value = "收款方式", example = "BANK_TRANSFER")
    private PayModeEnum payMode;

    /**
     * 提现货币，提现所使用的货币类型。
     */
    @ApiModelProperty(value = "提现货币，提现所使用的货币类型", required = true)
    private Coin coin;

    /**
     * 支付凭证图片URL，支付完成后的凭证图片链接。
     */
    @ApiModelProperty(value = "支付凭证图片URL", example = "https://example.com/receipt.jpg")
    private String paymentInstrument;

    /**
     * 打款时间，款项实际转账的时间。
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty(value = "打款时间", example = "2023-03-01 13:00:00")
    private Date remitTime;
}
